home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 7 / Gekikoh Dennoh Club Vol. 7 (Japan).7z / Gekikoh Dennoh Club Vol. 7 (Japan) (Track 01).bin / games / otoko / source.lzh / FuncEnemy / lboss04e.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-06-14  |  14.5 KB  |  593 lines

  1. /* 4面ボス左右耳 (04e = 04 ear) */
  2. #include <xsp2lib.h>
  3.  
  4. #include "../otoko.h"
  5. #include "../player.h"
  6. #include "../enemy.h"
  7. #include "../eshot.h"
  8. #include "../effect.h"
  9. #include "../priority.h"
  10. #include "../sound.h"
  11. #include "../psearch.h"
  12.  
  13.  
  14. #define HP_0    200        /* 耐久力 */
  15.  
  16. enum {
  17.     EAR_LEFT = 0, EAR_RIGHT
  18. };
  19.  
  20. static short EnemyMoveLBoss04E (ENEMY *);
  21. static void EnemyTiniLBoss04E (ENEMY *);
  22.  
  23.  
  24. void EnemyInitLBoss04E (ENEMY * p)
  25. {
  26.     p->hit_px = 32;
  27.     p->hit_py = 16;
  28.     p->hit_sx = 32;
  29.     p->hit_sy = 16;
  30.     p->hit_cx = 6;
  31.     p->timer = 0;
  32.     p->damage = 0;
  33.     p->flash = 0;
  34.     p->hp = HP_0;
  35.     p->seq = 0;
  36.     p->m_work = 0;
  37.     p->s_work = p->s_work2 = p->s_work3 = 0;
  38.     p->func_enemy_move = EnemyMoveLBoss04E;
  39.     p->func_enemy_tini = EnemyTiniLBoss04E;
  40.  
  41.     if (p->lx < 0) {
  42.         p->cwork = EAR_LEFT;    /* 左か右か */
  43.         p->pt = obj_lboss04 + 5;
  44.     } else {
  45.         p->cwork = EAR_RIGHT;
  46.         p->pt = obj_lboss04 + 6;
  47.     }
  48. }
  49.  
  50.  
  51.  
  52. static short EnemyMoveLBoss04E (ENEMY * p)
  53. {
  54.     signed short offset[24][2] =    /* 耳パーツの座標オフセット */
  55.     {
  56.         {-16, -16},
  57.         {-17, -16},
  58.         {-19, -16},
  59.         {-21, -16},
  60.         {-23, -16},
  61.         {-26, -16},
  62.         {-29, -16},
  63.         {-32, -16},
  64.         {-35, -16},
  65.         {-38, -16},
  66.         {-41, -16},
  67.         {-44, -16},
  68.         {-47, -16},
  69.         {-50, -16},
  70.         {-46, -16},
  71.         {-46, -16},
  72.         {-50, -16},
  73.         {-47, -16},
  74.         {-46, -16},
  75.         {-49, -16},
  76.         {-48, -16},
  77.         {-46, -16},
  78.         {-48, -16},
  79.         {-48, -16},
  80.     };
  81.  
  82.     if ((p->child_kill) || (p->child_death))
  83.         return (-1);    /* 消去 */
  84.  
  85.     switch (p->seq) {
  86.     case 0:
  87.         p->m_work++;
  88.         if (p->m_work < 24) {
  89.             if (p->cwork == EAR_LEFT)
  90.                 p->x = p->parent->x + offset[p->m_work][0];
  91.             else
  92.                 p->x = p->parent->x - offset[p->m_work][0];
  93.             p->y = p->parent->y + offset[p->m_work][1];
  94.         } else {
  95.             p->seq++;
  96.         }
  97.         if (p->m_work == 13)
  98.             SoundSetSE (SE_LOCK_M);    /* 「がちゃん」という効果音を鳴らす */
  99.         break;
  100.  
  101.     case 1:        /* 耳が出た */
  102.         if (p->cwork == EAR_LEFT)
  103.             p->x = p->parent->x - 48;
  104.         else
  105.             p->x = p->parent->x + 48;
  106.         p->y = p->parent->y - 16;
  107.  
  108.         /* 残り復活回数により攻撃方法を変える */
  109.         switch (p->arg) {
  110.  
  111.             /* なぎ倒し弾 */
  112.         case 12:
  113.             p->s_work2++;
  114. #define INTERVAL12        4
  115. #define SPEED_SHOT12    20
  116.             switch (p->s_work2) {
  117.             case INTERVAL12 * 1:
  118.                 if (p->cwork == EAR_LEFT)
  119.                     p->angle = 64 + 48;
  120.                 else
  121.                     p->angle = 64 - 48;
  122.             case INTERVAL12 * 2:
  123.             case INTERVAL12 * 3:
  124.             case INTERVAL12 * 4:
  125.             case INTERVAL12 * 5:
  126.             case INTERVAL12 * 6:
  127.             case INTERVAL12 * 7:
  128.             case INTERVAL12 * 8:
  129.             case INTERVAL12 * 9:
  130.             case INTERVAL12 * 10:
  131.             case INTERVAL12 * 11:
  132.             case INTERVAL12 * 12:
  133.                 EshotInit (ESHOT_NRG24N, p->x, p->y, SPEED_SHOT12, p->angle, 3);
  134.                 SoundSetSE (SE_ESHOT_M);    /* 敵ショット音 */
  135.                 if (p->cwork == EAR_LEFT)
  136.                     p->angle -= 8;
  137.                 else
  138.                     p->angle += 8;
  139.                 break;
  140.             case INTERVAL12 * 14:
  141.             case INTERVAL12 * 15:
  142.             case INTERVAL12 * 16:
  143.             case INTERVAL12 * 17:
  144.             case INTERVAL12 * 18:
  145.             case INTERVAL12 * 19:
  146.             case INTERVAL12 * 20:
  147.                 EshotInit (ESHOT_NRG24, p->x, p->y, SPEED_SHOT12, p->angle, 3);
  148.                 SoundSetSE (SE_ESHOT_M);    /* 敵ショット音 */
  149.                 if (p->cwork == EAR_LEFT)
  150.                     p->angle += 12;
  151.                 else
  152.                     p->angle -= 12;
  153.                 break;
  154.  
  155.             case INTERVAL12 * 24:
  156.                 p->s_work2 = 0;
  157.                 break;
  158.             default:
  159.                 break;
  160.             }
  161.             break;
  162.  
  163.  
  164.             /* V字型 */
  165.         case 11:
  166.             p->s_work2++;
  167. #define INTERVAL11        4
  168. #define SPEED_SHOT11    25
  169.             switch (p->s_work2) {
  170.             case 20 + INTERVAL11 * 0:
  171.                 p->s_angle = psearch (p->x, p->y);    /* 自機の方向をサーチ */
  172.             case 20 + INTERVAL11 * 1:
  173.             case 20 + INTERVAL11 * 2:
  174.             case 20 + INTERVAL11 * 3:
  175.             case 20 + INTERVAL11 * 4:
  176.             case 20 + INTERVAL11 * 5:
  177.             case 20 + INTERVAL11 * 6:
  178.             case 20 + INTERVAL11 * 7:
  179.             case 20 + INTERVAL11 * 8:
  180.                 EshotInit (ESHOT_NRG03, p->x, p->y, SPEED_SHOT11, p->s_angle - 12, 2);
  181.                 EshotInit (ESHOT_NRG03, p->x, p->y, SPEED_SHOT11, p->s_angle + 12, 2);
  182.                 SoundSetSE (SE_ESHOT);    /* 敵ショット音 */
  183.                 break;
  184.             case 20 + INTERVAL11 * 10:
  185.                 p->s_work2 = 0;
  186.                 break;
  187.             default:
  188.                 break;
  189.             }
  190.             break;
  191.  
  192.  
  193.             /* 炸裂弾連発 */
  194.         case 10:
  195.             p->s_work2++;
  196. #define INTERVAL10    20
  197. #define SPEED_SHOT10    23
  198.             switch (p->s_work2) {
  199.             case INTERVAL10 * 0:
  200.             case INTERVAL10 * 1:
  201.             case INTERVAL10 * 2:
  202.             case INTERVAL10 * 3:
  203.             case INTERVAL10 * 4:
  204.                 {
  205.                     unsigned char a = 0;
  206.                     short h;
  207.                     for (h = 0; h < 16; h++)
  208.                         EshotInit (ESHOT_NRG03, p->x, p->y, SPEED_SHOT10, a += 16, 2);
  209.                 }
  210.                 SoundSetSE (SE_EBOMB_M);
  211.                 break;
  212.             case INTERVAL10 * 0 + 1:
  213.             case INTERVAL10 * 1 + 1:
  214.             case INTERVAL10 * 2 + 1:
  215.             case INTERVAL10 * 3 + 1:
  216.             case INTERVAL10 * 4 + 1:
  217.                 {
  218.                     unsigned char a = 8;
  219.                     short h;
  220.                     for (h = 0; h < 16; h++)
  221.                         EshotInit (ESHOT_NRG03, p->x, p->y, SPEED_SHOT10, a += 16, 3);
  222.                 }
  223.                 break;
  224.             case INTERVAL10 * 7:
  225.                 p->s_work2 = 0;
  226.                 break;
  227.             default:
  228.                 break;
  229.             }
  230.             break;
  231.  
  232.  
  233.             /* 6方向弾 */
  234.         case 9:
  235.             p->s_work2++;
  236. #define INTERVAL9    6
  237. #define SPEED_SHOT9    18
  238.             switch (p->s_work2) {
  239.             case INTERVAL9 * 0:
  240.                 p->angle = 12;
  241.             case INTERVAL9 * 1:
  242.             case INTERVAL9 * 2:
  243.             case INTERVAL9 * 3:
  244.             case INTERVAL9 * 4:
  245.             case INTERVAL9 * 5:
  246.             case INTERVAL9 * 6:
  247.             case INTERVAL9 * 7:
  248.             case INTERVAL9 * 8:
  249.                 EshotInit (ESHOT_NRG02, p->x, p->y, SPEED_SHOT9, p->angle + 43 * 0, 3);
  250.                 EshotInit (ESHOT_NRG02, p->x, p->y, SPEED_SHOT9, p->angle + 43 * 1, 3);
  251.                 EshotInit (ESHOT_NRG02, p->x, p->y, SPEED_SHOT9, p->angle + 43 * 2, 3);
  252.                 EshotInit (ESHOT_NRG02, p->x, p->y, SPEED_SHOT9, p->angle + 43 * 3, 3);
  253.                 EshotInit (ESHOT_NRG02, p->x, p->y, SPEED_SHOT9, p->angle + 43 * 4, 3);
  254.                 EshotInit (ESHOT_NRG02, p->x, p->y, SPEED_SHOT9, p->angle + 43 * 5, 3);
  255.                 SoundSetSE (SE_ESHOT);    /* 敵ショット音 */
  256.                 break;
  257.  
  258.             case INTERVAL9 * 9:
  259.                 {
  260.                     unsigned char a = 8;
  261.                     short h;
  262.                     for (h = 0; h < 16; h++)
  263.                         EshotInit (ESHOT_NRG05, p->x, p->y, SPEED_SHOT9, a += 16, 3);
  264.                     SoundSetSE (SE_EBOMB_M);
  265.                 }
  266.                 break;
  267.  
  268.             case INTERVAL9 * 12:
  269.                 p->angle += 43;
  270.             case INTERVAL9 * 13:
  271.             case INTERVAL9 * 14:
  272.             case INTERVAL9 * 15:
  273.             case INTERVAL9 * 16:
  274.             case INTERVAL9 * 17:
  275.             case INTERVAL9 * 18:
  276.             case INTERVAL9 * 19:
  277.             case INTERVAL9 * 20:
  278.                 EshotInit (ESHOT_NRG02, p->x, p->y, SPEED_SHOT9, p->angle + 43 * 0, 3);
  279.                 EshotInit (ESHOT_NRG02, p->x, p->y, SPEED_SHOT9, p->angle + 43 * 1, 3);
  280.                 EshotInit (ESHOT_NRG02, p->x, p->y, SPEED_SHOT9, p->angle + 43 * 2, 3);
  281.                 EshotInit (ESHOT_NRG02, p->x, p->y, SPEED_SHOT9, p->angle + 43 * 3, 3);
  282.                 EshotInit (ESHOT_NRG02, p->x, p->y, SPEED_SHOT9, p->angle + 43 * 4, 3);
  283.                 EshotInit (ESHOT_NRG02, p->x, p->y, SPEED_SHOT9, p->angle + 43 * 5, 3);
  284.                 SoundSetSE (SE_ESHOT);    /* 敵ショット音 */
  285.                 break;
  286.             case INTERVAL9 * 21:
  287.                 {
  288.                     unsigned char a = 8;
  289.                     short h;
  290.                     for (h = 0; h < 16; h++)
  291.                         EshotInit (ESHOT_NRG05, p->x, p->y, SPEED_SHOT9, a += 16, 3);
  292.                     SoundSetSE (SE_EBOMB_M);
  293.                 }
  294.                 break;
  295.  
  296.             case INTERVAL9 * 25:
  297.                 p->s_work2 = 0;
  298.                 break;
  299.             default:
  300.                 break;
  301.             }
  302.             break;
  303.  
  304.  
  305.             /* 扇状ばらまき弾 */
  306.         case 8:
  307.             p->s_work2++;
  308. #define INTERVAL8    6
  309. #define SPEED_SHOT8    15
  310.             if (p->s_work2 > INTERVAL8) {
  311.                 short type;
  312.                 short type_table[15] =
  313.                 {ESHOT_NRG02,
  314.                  ESHOT_NRG02, ESHOT_NRG02, ESHOT_NRG02, ESHOT_NRG02,
  315.                  ESHOT_NRG03, ESHOT_NRG03, ESHOT_NRG03, ESHOT_NRG04,
  316.                  ESHOT_NRG04, ESHOT_NRG04, ESHOT_NRG05, ESHOT_NRG05,
  317.                  ESHOT_NRG06, ESHOT_NRG34N};
  318.  
  319.                 p->s_work2 = 0;
  320.                 p->s_work3++;
  321.                 if (p->s_work3 == 1) {
  322.                     p->s_angle = psearch (p->x, p->y);    /* 自機の方向をサーチ */
  323.                     p->s_angle2 = p->x;    /* 乱数の種として使用 */
  324.                     p->s_work4 = SPEED_SHOT8;
  325.                 }
  326.                 type = type_table[p->s_work3];
  327.  
  328.                 if (p->s_work3 < 15) {
  329.                     EshotInit (type, p->x, p->y, p->s_work4, p->s_angle + ((rndtable[p->s_angle2++]) & 63) - 32, 3);
  330.                     EshotInit (type, p->x, p->y, p->s_work4, p->s_angle + ((rndtable[p->s_angle2++]) & 63) - 32, 3);
  331.                     EshotInit (type, p->x, p->y, p->s_work4++, p->s_angle + ((rndtable[p->s_angle2++]) & 63) - 32, 3);
  332.                     SoundSetSE (SE_ESHOT);    /* 敵ショット音 */
  333.                 }
  334.                 if (p->s_work3 >= 20)
  335.                     p->s_work3 = 0;
  336.             }
  337.             break;
  338.  
  339.  
  340.             /* 3方向斜め弾 */
  341.         case 7:
  342.             p->s_work2++;
  343. #define INTERVAL7    15
  344. #define SPEED_SHOT7    12
  345.             if (p->s_work2 > INTERVAL7) {
  346.                 p->s_work2 = 0;
  347.                 p->s_work3++;
  348.                 if (p->s_work3 < 5) {
  349.                     if (p->cwork == EAR_LEFT) {
  350.                         EshotInit (ESHOT_NRG22, p->x, p->y, SPEED_SHOT7, 64 + 9, 3);
  351.                         EshotInit (ESHOT_NRG22, p->x, p->y, SPEED_SHOT7 + 4, 64, 3);
  352.                         EshotInit (ESHOT_NRG22, p->x, p->y, SPEED_SHOT7 + 8, 64 - 9, 3);
  353.                     } else {
  354.                         EshotInit (ESHOT_NRG22, p->x, p->y, SPEED_SHOT7, 64 - 9, 3);
  355.                         EshotInit (ESHOT_NRG22, p->x, p->y, SPEED_SHOT7 + 4, 64, 3);
  356.                         EshotInit (ESHOT_NRG22, p->x, p->y, SPEED_SHOT7 + 8, 64 + 9, 3);
  357.                     }
  358.                     SoundSetSE (SE_ESHOT);    /* 敵ショット音 */
  359.                 }
  360.                 if (p->s_work3 >= 7)
  361.                     p->s_work3 = 0;
  362.             }
  363.             break;
  364.  
  365.  
  366.             /* 半円炸裂弾連発 */
  367.         case 6:
  368.             p->s_work2++;
  369. #define INTERVAL6    18
  370. #define SPEED_SHOT6    13
  371.             if (p->s_work2 > INTERVAL6) {
  372.                 p->s_work2 = 0;
  373.                 p->s_work3++;
  374.  
  375.                 if (p->s_work3 == 1)
  376.                     p->s_work4 = SPEED_SHOT6;
  377.                 if (p->s_work3 < 6) {
  378.                     unsigned char a = 16;
  379.                     short type;
  380.                     short type_table[6] =
  381.                     {ESHOT_NRG02, ESHOT_NRG02, ESHOT_NRG03, ESHOT_NRG03, ESHOT_NRG04, ESHOT_NRG05,};
  382.                     short h;
  383.                     type = type_table[p->s_work3];
  384.                     for (h = 0; h < 12; h++)
  385.                         EshotInit (type, p->x, p->y, p->s_work4, a += 8, 2);
  386.                     p->s_work4 += 2;
  387.                     SoundSetSE (SE_EBOMB_M);
  388.                 }
  389.                 if (p->s_work3 >= 7)
  390.                     p->s_work3 = 0;
  391.             }
  392.             break;
  393.  
  394.  
  395.             /* 伸びるV字弾 */
  396.         case 5:
  397.             p->s_work2++;
  398. #define SPEED_SHOT5    10
  399.             if (p->s_work2 == 12) {
  400.                 unsigned char a = psearch (p->x, p->y);    /* 自機の方向をサーチ */
  401.                 EshotInit (ESHOT_NRG02, p->x, p->y, SPEED_SHOT5, a + 8, 2);
  402.                 EshotInit (ESHOT_NRG02, p->x, p->y, SPEED_SHOT5, a - 8, 2);
  403.                 EshotInit (ESHOT_NRG03, p->x, p->y, SPEED_SHOT5 + 3 * 1, a + 8, 2);
  404.                 EshotInit (ESHOT_NRG03, p->x, p->y, SPEED_SHOT5 + 3 * 1, a - 8, 2);
  405.                 EshotInit (ESHOT_NRG03, p->x, p->y, SPEED_SHOT5 + 3 * 2, a + 8, 2);
  406.                 EshotInit (ESHOT_NRG03, p->x, p->y, SPEED_SHOT5 + 3 * 2, a - 8, 2);
  407.                 EshotInit (ESHOT_NRG04, p->x, p->y, SPEED_SHOT5 + 3 * 3, a + 8, 2);
  408.                 EshotInit (ESHOT_NRG04, p->x, p->y, SPEED_SHOT5 + 3 * 3, a - 8, 2);
  409.                 EshotInit (ESHOT_NRG05, p->x, p->y, SPEED_SHOT5 + 3 * 4, a + 8, 2);
  410.                 EshotInit (ESHOT_NRG05, p->x, p->y, SPEED_SHOT5 + 3 * 4, a - 8, 2);
  411.                 EshotInit (ESHOT_NRG35, p->x, p->y, SPEED_SHOT5 + 3 * 5, a + 8, 2);
  412.                 EshotInit (ESHOT_NRG35, p->x, p->y, SPEED_SHOT5 + 3 * 5, a - 8, 2);
  413.                 SoundSetSE (SE_EBOMB_L);
  414.             }
  415.             if (p->s_work2 >= 36)
  416.                 p->s_work2 = 0;
  417.             break;
  418.  
  419.  
  420.             /* たがい違い半円炸裂弾連発 */
  421.         case 4:
  422.             p->s_work2++;
  423. #define INTERVAL4    20
  424. #define SPEED_SHOT4    18
  425.             switch (p->s_work2) {
  426.             case INTERVAL4 * 1:
  427.             case INTERVAL4 * 3:
  428.             case INTERVAL4 * 5:
  429.                 {
  430.                     unsigned char a = 8;
  431.                     short h;
  432.                     for (h = 0; h < 7; h++) {
  433.                         EshotInit (ESHOT_NRG02, p->x, p->y, SPEED_SHOT4, a += 8, 2);
  434.                         EshotInit (ESHOT_NRG04, p->x, p->y, SPEED_SHOT4, a += 8, 4);
  435.                     }
  436.                 }
  437.                 SoundSetSE (SE_EBOMB_M);
  438.                 break;
  439.             case INTERVAL4 * 2:
  440.             case INTERVAL4 * 4:
  441.                 {
  442.                     unsigned char a = 16;
  443.                     short h;
  444.                     for (h = 0; h < 6; h++) {
  445.                         EshotInit (ESHOT_NRG03, p->x, p->y, SPEED_SHOT4 + 2, a += 8, 2);
  446.                         EshotInit (ESHOT_NRG05, p->x, p->y, SPEED_SHOT4 + 2, a += 8, 4);
  447.                     }
  448.                 }
  449.                 SoundSetSE (SE_EBOMB_M);
  450.                 break;
  451.             case INTERVAL4 * 7:
  452.                 p->s_work2 = 0;
  453.                 break;
  454.             default:
  455.                 break;
  456.             }
  457.             break;
  458.  
  459.  
  460.             /* ダイヤ型弾 */
  461.         case 3:
  462.             p->s_work2++;
  463. #define INTERVAL3    18
  464. #define SPEED_SHOT3    22
  465.             if (p->s_work2 > INTERVAL3) {
  466.                 char a = psearch (p->x, p->y);    /* 自機の方向をサーチ */
  467.                 p->s_work2 = 0;
  468.                 p->s_work3++;
  469.  
  470.                 if (p->s_work3 < 7) {
  471.                     EshotInit (ESHOT_NRG14N, p->x, p->y - 12, SPEED_SHOT3, a, 0);
  472.                     EshotInit (ESHOT_NRG14N, p->x + 12, p->y, SPEED_SHOT3, a, 0);
  473.                     EshotInit (ESHOT_NRG14N, p->x, p->y + 12, SPEED_SHOT3, a, 0);
  474.                     EshotInit (ESHOT_NRG14N, p->x - 12, p->y, SPEED_SHOT3, a, 0);
  475.                     SoundSetSE (SE_ESHOT_M);    /* 敵ショット音 */
  476.                 }
  477.                 if (p->s_work3 >= 9)
  478.                     p->s_work3 = 0;
  479.             }
  480.             break;
  481.  
  482.  
  483.  
  484.             /* 3方向弾 */
  485.         case 2:
  486.             p->s_work2++;
  487. #define INTERVAL2    7
  488. #define SPEED_SHOT2    20
  489.             switch (p->s_work2) {
  490.             case INTERVAL2 * 1:
  491.                 p->s_angle = psearch (p->x, p->y);    /* 自機の方向をサーチ */
  492.             case INTERVAL2 * 2:
  493.             case INTERVAL2 * 3:
  494.             case INTERVAL2 * 4:
  495.             case INTERVAL2 * 5:
  496.                 EshotInit (ESHOT_NRG03, p->x, p->y, SPEED_SHOT2, p->s_angle - 18, 2);
  497.                 EshotInit (ESHOT_NRG05, p->x, p->y, SPEED_SHOT2+2, p->s_angle, 2);
  498.                 EshotInit (ESHOT_NRG03, p->x, p->y, SPEED_SHOT2, p->s_angle + 18, 2);
  499.                 SoundSetSE (SE_ESHOT_M);    /* 敵ショット音 */
  500.                 break;
  501.             case INTERVAL2 * 8:
  502.                 p->s_work2 = 0;
  503.                 break;
  504.             default:
  505.                 break;
  506.             }
  507.             break;
  508.  
  509.  
  510.             /* 不等号弾 */
  511.         case 1:
  512.             p->s_work2++;
  513. #define INTERVAL1    6
  514. #define SPEED_SHOT1    22
  515.             switch (p->s_work2) {
  516.             case INTERVAL1 * 1:
  517.                 p->s_angle = psearch (p->x, p->y);    /* 自機の方向をサーチ */
  518.                 EshotInit (ESHOT_NRG05, p->x, p->y, SPEED_SHOT1, p->s_angle, 2);
  519.                 SoundSetSE (SE_ESHOT_M);    /* 敵ショット音 */
  520.                 break;
  521.             case INTERVAL1 * 2:
  522.                 EshotInit (ESHOT_NRG04, p->x+6*1, p->y, SPEED_SHOT1, p->s_angle, 2);
  523.                 EshotInit (ESHOT_NRG04, p->x-6*1, p->y, SPEED_SHOT1, p->s_angle, 2);
  524.                 SoundSetSE (SE_ESHOT_M);    /* 敵ショット音 */
  525.                 break;
  526.             case INTERVAL1 * 3:
  527.                 EshotInit (ESHOT_NRG03, p->x+6*2, p->y, SPEED_SHOT1, p->s_angle, 2);
  528.                 EshotInit (ESHOT_NRG03, p->x-6*2, p->y, SPEED_SHOT1, p->s_angle, 2);
  529.                 SoundSetSE (SE_ESHOT_M);    /* 敵ショット音 */
  530.                 break;
  531.             case INTERVAL1 * 4:
  532.                 EshotInit (ESHOT_NRG02, p->x+6*3, p->y, SPEED_SHOT1, p->s_angle, 2);
  533.                 EshotInit (ESHOT_NRG02, p->x-6*3, p->y, SPEED_SHOT1, p->s_angle, 2);
  534.                 SoundSetSE (SE_ESHOT_M);    /* 敵ショット音 */
  535.                 break;
  536.             case INTERVAL1 * 8:
  537.                 p->s_work2 = 0;
  538.                 break;
  539.             default:
  540.                 break;
  541.             }
  542.             break;
  543.  
  544.  
  545.         default:    /* ここには来ないハズ */
  546.             p->arg = 1;    /* バグ避け */
  547.             break;
  548.         }        /* end of switch(p->arg) */
  549.         break;
  550.  
  551.     default:
  552.         break;
  553.     }
  554.  
  555.  
  556.  
  557.     /* 自機ショットに当たった時の処理 */
  558.     if (p->damage) {
  559.         SoundSetSE (SE_DAMAGE);
  560.         p->info = PALET_DAMAGE | PRIORITY_BOSS;
  561.         p->damage_core = 0;
  562.         if ((p->hp -= p->damage) <= 0) {
  563.             /* 死んだ */
  564.             EffectInit (EFFECT_EXPL, 0, p->x, p->y);
  565.             EffectInit (EFFECT_POINTS_RED, POINTS_1200, p->x, p->y);
  566.             SoundSetSE (SE_EXPL_M);    /* 中ボス爆発音 */
  567.             if (disp_level == DISP_LEVEL_HIGH)
  568.                 EffectInit (EFFECT_HAHENMINI, 0, p->x, p->y);
  569.             p->child_death = !0;    /* 消去準備 */
  570.         }
  571.         p->damage = 0;
  572.         p->flash = TIMER_FLASH_DAMAGE;
  573.     } else {
  574.         if ((p->flash++ > TIMER_FLASH_RED) && (p->hp < 50)) {
  575.             p->info = PALET_RED | PRIORITY_BOSS_PARTS_L;
  576.             if (p->flash > TIMER_FLASH_NORMAL)
  577.                 p->flash = 0;
  578.         } else {
  579.             p->info = PALET_LBOSS04 | PRIORITY_BOSS_PARTS_L;
  580.         }
  581.     }
  582.     xobj_set_st (p);
  583.  
  584.  
  585.     return (0);
  586. }
  587.  
  588.  
  589.  
  590. static void EnemyTiniLBoss04E (ENEMY * p)
  591. {
  592. }
  593.